package com.robot.common.utils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 随机邀请码工具类，基于Collections.shuffle(list);
 */
public class ShuffleCodeUtils {
    /**
     * 随机码位数
     */
    public static final int BITS = 8;
    /**
     * 字符列表大小 = 32 = 8个数字 + 24个字母
     */
    private static final int SIZE = 32;
    /**
     * 字符列表：数字和字母
     * 8个数字: 不包含0和1
     * 24个字母: 不包含O和I
     */
    private static final List<Character> CHARS = new ArrayList<>(SIZE);

    // 初始化字符列表
    static {
        // 存入数字
        for (char c = '2'; c <= '9'; c++) {
            CHARS.add(c);
        }
        // 存入字母
        for (char c = 'A'; c <= 'Z'; c++) {
            if (c != 'O' && c != 'I') {
                CHARS.add(c);
            }
        }
    }

    /**
     * 产生一个随机码
     */
    public static synchronized String getRandomCode() {
        // 洗牌
        Collections.shuffle(CHARS);
        // 洗牌后前BITS个字符组成随机码
        StringBuilder sb = new StringBuilder(BITS);
        for (int i = 0; i < BITS; i++) {
            sb.append(CHARS.get(i));
        }
        return sb.toString();
    }

}
